////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2017 Qualcomm Technologies, Inc.
// All Rights Reserved.
// Confidential and Proprietary - Qualcomm Technologies, Inc.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @file  camxipeanr10register.h
/// @brief CamX IQ ANR10 register update declarations
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#ifndef CAMXIPEANR10REGISTER_H
#define CAMXIPEANR10REGISTER_H

/// IQ Chromatix Headers
#include "anr_1_0_0.h"

/// IQ Setting Headers
#include "anr10setting.h"

/// Camx Headers

#include "camxipeanr10.h"
#include "camxtypes.h"

CAMX_NAMESPACE_BEGIN
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @brief Class that implements the CAMX ANR register interface
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class ANRRegisterSetting
{
public:
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// SetBlend1Registers
    ///
    /// @brief  set Blend 1 registers
    ///
    /// @param  pANRData       Pointer ANR Reg pass data
    /// @param  pPassRegCmd    Pointer to Pass reg command
    ///
    /// @return return CamxResult
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static CamxResult SetBlend1Registers(
        ANR_REG_PASS*    pANRData,
        IPEANRRegCmd*    pPassRegCmd);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// SetRNFRegisters
    ///
    /// @brief  Set ANR RNF Registers
    ///
    /// @param  pANRData       Pointer ANR Reg pass data
    /// @param  pPassRegCmd    Pointer to Pass reg command
    ///
    /// @return return CamxResult
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static CamxResult SetRNFRegisters(
        ANR_REG_PASS*    pANRData,
        IPEANRRegCmd*    pPassRegCmd);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// SetDCUSRegisters
    ///
    /// @brief  Set ANR DCUS registers
    ///
    /// @param  pANRData       Pointer ANR Reg pass data
    /// @param  pPassRegCmd    Pointer to Pass reg command
    ///
    /// @return return CamxResult
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static CamxResult SetDCUSRegisters(
        ANR_REG_PASS*    pANRData,
        IPEANRRegCmd*    pPassRegCmd);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// SetCFilter2Registers
    ///
    /// @brief  Set ANRC Filter Registers
    ///
    /// @param  pANRData       Pointer ANR Reg pass data
    /// @param  pPassRegCmd    Pointer to Pass reg command
    ///
    /// @return return CamxResult
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static CamxResult SetCFilter2Registers(
        ANR_REG_PASS*    pANRData,
        IPEANRRegCmd*    pPassRegCmd);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// SetBlend2Registers
    ///
    /// @brief  set Blend 2 registers
    ///
    /// @param  pANRData       Pointer ANR Reg pass data
    /// @param  pPassRegCmd    Pointer to Pass reg command
    ///
    /// @return return CamxResult
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static CamxResult SetBlend2Registers(
        ANR_REG_PASS*    pANRData,
        IPEANRRegCmd*    pPassRegCmd);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// SetCYLPFPreLensGainRegisters
    ///
    /// @brief  Set CYLPFPreLensGain registers
    ///
    /// @param  pANRData       Pointer ANR Reg pass data
    /// @param  pPassRegCmd    Pointer to Pass reg command
    ///
    /// @return return CamxResult
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static CamxResult SetCYLPFPreLensGainRegisters(
        ANR_REG_PASS*    pANRData,
        IPEANRRegCmd*    pPassRegCmd);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// SetCYLPFLensGainRegisters
    ///
    /// @brief  Set CYLPFLensGain registers
    ///
    /// @param  pANRData       Pointer ANR Reg pass data
    /// @param  pPassRegCmd    Pointer to Pass reg command
    ///
    /// @return return CamxResult
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static CamxResult SetCYLPFLensGainRegisters(
        ANR_REG_PASS*    pANRData,
        IPEANRRegCmd*    pPassRegCmd);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// SetCYLPFPostLensGainRegisters
    ///
    /// @brief  Set PostCYLPFLensGain registers
    ///
    /// @param  pANRData       Pointer ANR Reg pass data
    /// @param  pPassRegCmd    Pointer to Pass reg command
    ///
    /// @return return CamxResult
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static CamxResult SetCYLPFPostLensGainRegisters(
        ANR_REG_PASS*    pANRData,
        IPEANRRegCmd*    pPassRegCmd);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// SetCNRRegisters
    ///
    /// @brief  Set CNR registers
    ///
    /// @param  pANRData       Pointer ANR Reg pass data
    /// @param  pPassRegCmd    Pointer to Pass reg command
    ///
    /// @return return CamxResult
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static CamxResult SetCNRRegisters(
        ANR_REG_PASS*    pANRData,
        IPEANRRegCmd*    pPassRegCmd);

};
CAMX_NAMESPACE_END
#endif // CAMXIPEANR10REGISTER_H